package com.united.ucts.common.plugin.mybatis;

import com.united.frame.mybatis.handler.AbstractMybatisPlusMetaObjectHandler;
import com.united.frame.plugin.security.CurrUserHolder;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

/**
 * 自定义的实现mybatis-plus的自动填充处理配置类
 * 主要用于处理数据库字段中包含create_time、update_time字段的自动填充当前操作时间
 * getFieldValByName 方法是父接口中的默认方法,用字段名字通过反射获取待插入对象中指定名字字段的值;
 * 同理, setFieldValByName 方法也是父接口中的默认方法,用字段名字通过反射设置待插入对象中指定名字字段的值;
 *
 * @author hudan
 * @version 1.0
 * @filename MybatisPlusMetaObjectHandler.java
 * @copyright <a href="www.united.cn">www.united.cn</a>
 * @date 2019-11-10
 */
@Component
public class MybatisPlusMetaObjectHandler extends AbstractMybatisPlusMetaObjectHandler {

    /**
     * 重写insert操作时,数据库特殊字段的填充处理
     *
     * @param metaObject 当前操作数据对象
     */
    @Override
    public void insertFill(MetaObject metaObject) {
        // 调用已封装的方法, 设置通用库表字段的默认值
        insertFill(metaObject, CurrUserHolder.getCurrUser().getId());
    }

    /**
     * 重写update操作时,数据库特殊字段的填充处理
     *
     * @param metaObject 当前操作数据对象
     */
    @Override
    public void updateFill(MetaObject metaObject) {
        // 调用已封装的方法, 更新用库表字段的默认值
        updateFill(metaObject, CurrUserHolder.getCurrUser().getId());
    }
}